import diff from "./diff";

export default class Component {
  constructor(props) {
    this.props = props;
  }

  setState(state) {
    // 谁调用 this指向谁
    // 合并state
    this.state = Object.assign({}, this.state, state);
    // 获取最新的虚拟DOM
    let virtualDOM = this.render();
    // 获取旧的虚拟DOM
    let oldDOM = this.getDOM();
    // 获取容器元素
    let container = oldDOM.parentNode;
    diff(virtualDOM, container, oldDOM);
  }

  setDOM(DOM) {
    this._dom = DOM;
  }
  getDOM() {
    return this._dom;
  }

  updateProps(props) {
    this.props = props;
  }

  /*
  ** 生命周期函数：这些方法为空实现，用于在组件不同生命周期阶段执行特定逻辑
  */
  componentWillMount() {
    // 组件挂载前调用
  }
  componentDidMount() {
    // 组件挂载后调用
  }
  componentWillReceiveProps(nextProps) {
    // 接收新props时调用
  }
  shouldComponentUpdate(nextProps, nextState) {
    // 判断组件是否需要更新，默认比较props和state
    return nextProps !== this.props || nextState !== this.state;
  }
  componentWillUpdate(nextProps, nextState) {
    // 组件更新前调用
  }
  componentDidUpdate(prevProps, prevState) {
    // 组件更新后调用
  }
  componentWillUnmount() {
    // 组件卸载时调用
  }
}
